'''
Author: chenhb 577663535@qq.com
Date: 2023-03-23 16:38:48
LastEditors: chenhb 577663535@qq.com
LastEditTime: 2023-04-06 13:47:34
FilePath: /Myapp/urls.py
'''
# -*- coding: UTF8 -*-
import os
import sys
# from fuzzywuzzy import fuzz
import pandas as pd


def mkdir(path):
    folder = os.path.exists(path)

    if not folder:  # 判断是否存在文件夹如果不存在则创建为文件夹

        os.makedirs(path)  # makers 创建文件时如果路径不存在会创建这个路径


def app_path():
    if hasattr(sys, 'frozen'):
        return os.path.dirname(sys.executable)  # 使用pyinstaller打包后的exe目录
    return os.path.dirname(__file__)


BASE_DIR = app_path()

# print(BASE_DIR)

TEMPLATES = {
    '钢筋': {
        '钢筋安装': os.path.join(BASE_DIR, 'Templates/钢筋/钢筋安装检验批质量验收记录).xlsx'),
        '钢筋连接': os.path.join(BASE_DIR, 'Templates/钢筋/钢筋连接检验批质量验收记录).xlsx'),
        '钢筋加工': os.path.join(BASE_DIR, 'Templates/钢筋/钢筋加工检验批质量验收记录.xlsx'),
        '钢筋原材料': os.path.join(BASE_DIR, 'Templates/钢筋/钢筋原材料检验批质量验收记录.xlsx'),

    },
    '模板': {
        '模板安装': os.path.join(BASE_DIR, 'Templates\模板\模板分项工程模板安装检验批质量验收记录(DB).xlsx')
    },
    '混凝土': {
        '混凝土拌合物': os.path.join(BASE_DIR, 'Templates/混凝土/混凝土拌合物检验批质量验收记录).xlsx'),
        '混凝土原材料': os.path.join(BASE_DIR, 'Templates/混凝土/混凝土原材料检验批质量验收记录).xls'),
        '混凝土施工': os.path.join(BASE_DIR, 'Templates/混凝土/混凝土施工检验批质量验收记录).xlsx'),
    },
    '封面': {
        '报审表': os.path.join(BASE_DIR, 'Templates/封面/封面.xlsx'),
        '报审表2': os.path.join(BASE_DIR, 'Templates/封面/表Ｂ．０．９　报审、报验表.xlsx')
    },
    '现浇结构': {
        '位置和尺寸偏差': os.path.join(BASE_DIR, 'Templates/现浇结构/位置和尺寸偏差检验批质量验收记录).xlsx'),
        '现浇结构外观尺寸': os.path.join(BASE_DIR, 'Templates/现浇结构/现浇结构外观质量检验批质量验收记录).xlsx')
    },
    '隐蔽验收': {
        '钢筋隐蔽验收': os.path.join(BASE_DIR, 'Templates/隐蔽验收/钢筋隐蔽工程检查验收记录.xlsx'),
        '钢筋隐蔽验收图片': os.path.join(BASE_DIR, 'static/images'),
        '混凝土隐蔽验收': os.path.join(BASE_DIR, 'Templates/隐蔽验收/混凝土隐蔽工程检查验收记录.xlsx'),
        '隐蔽验收': os.path.join(BASE_DIR, 'Templates/隐蔽验收/W通用隐蔽工程检查验收记录.xlsx')

    },
    'static': {
        'image': os.path.join(BASE_DIR, 'static/image/1.jpg'),
        'error_image':os.path.join(BASE_DIR, 'static/error_image.png')
    },
    '技术复核': {
        '技术复核': os.path.join(BASE_DIR, 'Templates/技术复核/技术复核.xlsx')
    },
    '数据库': {
        '天气数据库': os.path.join(BASE_DIR, 'DateBase')#已经换位置
    },
    "端口": {
        # '内容输入的界面': os.path.join(BASE_DIR, '混凝土浇筑台账.xlsx'),#后续需要改变他的各式作为一个多项目的数据库
        '内容输入的界面2': os.path.join(BASE_DIR, 'Input/检验批验收内容.xlsx'),
        '隐蔽验收输入界面': os.path.join(BASE_DIR, 'Input/隐蔽验收输入内容的表格.xlsx'),
        '项目基本信息输入界面': os.path.join(BASE_DIR, 'static/xlsx/项目基本信息.xlsx'),
        '输出':
            os.path.join(BASE_DIR, 'OUTPUT'),
    },
    '建筑装饰装修': {
        '地面': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/水泥混凝土整体面层工程.xlsx'),
        '一般抹灰': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/03010101_一般抹灰检验批质量验收记录.xlsx'),
        '铝合金门窗': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/03030202_铝合金门窗安装检验批质量验收记录.xlsx'),
        '水性涂料': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/03090101_水性涂料涂饰检验批质量验收记录.xlsx'),
        '板状面层铺设(金属地板)': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/03120307_金属板面层检验批质量验收记录.xlsx'),
        '板状面层吊顶': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/03040201_板块面层吊顶检验批质量验收记录.xlsx'),
        '砖面层': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/砖面层检验批质量验收记录.xlsx'),
        '大理石面层': os.path.join(BASE_DIR, 'Templates/建筑装饰装修/大理石面层和花岗石面层检验批质量验收记录.xlsx'),

    },
    '建筑屋面': {
        '防水卷材': os.path.join(BASE_DIR, 'Templates/建筑屋面/防水卷材检验批质量验收记录表.xlsx'),
        '保温层': os.path.join(BASE_DIR, 'Templates/建筑屋面/保温层检验批质量验收记录表.xlsx'),
    },
    '建筑给排水': {
        '室内给排水管道安装': os.path.join(BASE_DIR, 'Templates/建筑给排水/给水管道及配件安装检验批质量验收记录.xlsx'),
        '室内热水管道安装': os.path.join(BASE_DIR,
                                 'Templates/建筑给排水/室内热水系统管道及配件安装检验批质量验收记录.xlsx'),
        '室外给排水管道安装': os.path.join(BASE_DIR,
                                  'Templates/建筑给排水/室外给水管道安装工程检验批质量验收记录050601.xlsx'),
    },
    '道路': {
        '路基': os.path.join(BASE_DIR, 'Templates/道路/土方路基(填方)检验批质量检验记录.xlsx'),
        '基层': os.path.join(BASE_DIR, 'Templates/道路/基层（水泥稳定土类）检验批质量检验记录.xlsx'),
        '面层': os.path.join(BASE_DIR, 'Templates/道路/水泥混凝土面层检验批质量检验记录.xlsx')
    },
    '建筑电气': {
        '电线导管穿线和敷设': os.path.join(BASE_DIR, 'Templates/建筑电气/管内穿线和槽盒内敷线检验批质量验收记录.xlsx'),
        '防雷引下线及接闪器的安装': os.path.join(BASE_DIR, 'Templates/建筑电气/防雷引下线及接闪器安装检验批质量验收记录.xlsx'),
        '开关插座风扇安装': os.path.join(BASE_DIR, 'Templates/建筑电气/开关、插座、风扇安装检验批质量验收记录.xlsx'),
        '接地装置安装': os.path.join(BASE_DIR, 'Templates/建筑电气/接地装置安装检验批质量验收记录.xlsx'),
        '建筑等电位联结': os.path.join(BASE_DIR, 'Templates/建筑电气/建筑物等电位联结检验批质量验收记录.xlsx'),
    },
    '主体结构': {
        '填充墙砌体': os.path.join(BASE_DIR, 'Templates/主体结构/填充墙砌体检验批质量验收记录.xlsx'),

    },
    '建筑节能': {
        '墙体保温': os.path.join(BASE_DIR, 'Templates/建筑节能/墙体节能工程检验批质量验收表.xlsx'),
    },
    '隐蔽验收数据地址':os.path.join(BASE_DIR, 'static/xlsx/checkproject.xlsx')

}
# print(TEMPLATES['端口']['内容输入的界面'])

#
# 单独负责编号的系统
class ThirdBasePath(object):
    """_summary_

    Args:
        object (_type_): _description_
    """

    """_summary_#路径编号的
    """

    def __init__(self, inport_sheetname, projectInformation) -> None:
        """_summary_

           '分部工程','子分部工程','分项工程','分部工程号','子分部工程号','分项工程号'
        """
        self.inport_sheetname = inport_sheetname

        self.projectInformation = projectInformation
        self.Dateframe = pd.read_excel(
            r'/Users/chenhongbin/PycharmProjects/flask/myapps/myapp2/static/xlsx/新分部分项划分表2.xlsx',
            header=0,
            sheet_name='Sheet1')

        self.ThirdBasePath()

        self.finally_code()

    def ThirdBasePath(self):

        # 一级目录

        DIR_BASE_PATH = os.path.join(
            BASE_DIR, 'OUTPUT', self.projectInformation['单位工程'])

        # 二级目录

        FIRST_BASE_PATH = os.path.join(
            DIR_BASE_PATH, self.projectInformation['分部工程'])

        mkdir(FIRST_BASE_PATH)

        # 二级目录
        self.SECOND_BASE_PATH = os.path.join(
            FIRST_BASE_PATH, self.projectInformation['子分部工程'])

        mkdir(self.SECOND_BASE_PATH)

        # 三级目录
        FILE_PATH = f"{self.projectInformation['检验批部位']}{self.inport_sheetname}检验批.xlsx"
        self.THIRD_BASE_PATH = os.path.join(
            self.SECOND_BASE_PATH, FILE_PATH)  # 文件路径

    def number_encode(self, number):

        number = str(number)
        if len(number) == 1:
            return '0' + number
        else:
            return number

    def finally_code(self):

        # 分部工程号

        index1 = self.Dateframe[self.Dateframe['分部工程']
                                == self.projectInformation['分部工程']].index[0]
        FILE_SCORE = self.number_encode(self.Dateframe['分部工程号'].iloc[index1])

        # 子分部工程号
        index2 = self.Dateframe[(self.Dateframe['分部工程'] == self.projectInformation['分部工程']) &
                                (self.Dateframe['子分部工程'] == self.projectInformation['子分部工程'])].index[0]

        Second_SCORE = self.number_encode(
            self.Dateframe['子分部工程号'].iloc[index2])

        # 分项工程号

        index3 = self.Dateframe[(self.Dateframe['分部工程'] == self.projectInformation['分部工程']) &
                                (self.Dateframe['子分部工程'] == self.projectInformation['子分部工程']) &
                                (self.Dateframe['分项工程'] == self.projectInformation['分项工程'])].index[0]

        Third_SCORE = self.number_encode(
            int(self.Dateframe['分项工程号'].iloc[index3]))

        excel_path = excel_path = TEMPLATES['端口']['内容输入的界面2']
        self.DIR_DATEFRAME2 = pd.read_excel(
            excel_path, sheet_name='主页', usecols=[
                5, 6], header=0)
        self.DIR_DATEFRAME2['匹配度'] = self.DIR_DATEFRAME2['单位工程'].apply(lambda x: fuzz.ratio(
            x, self.projectInformation['单位工程']) if x == self.projectInformation['单位工程'] else 0)

        first_code = self.number_encode(
            self.DIR_DATEFRAME2['单位工程号'].iloc[self.DIR_DATEFRAME2['匹配度'].idxmax()])

        # 工程号
        scend_code = 'ZLYJ-' + first_code + FILE_SCORE + \
            Second_SCORE + '_S3_' + Third_SCORE

        from model import inquire_encode

        finally_code = inquire_encode(
            self.projectInformation['检验批部位'], scend_code)
        return finally_code

        # self.ThirdBaseScore=FILE_SCORE+SECOND_SCORE+Third_SCORE
